﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class EditarParvulos : Form
    {
        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        IEnumerable<Parvulo> Lista1;
        IEnumerable<Conviviente> ListaConvivientes;
        Generador g = new Generador();
        Validacion v = new Validacion();
        int a;

        int valdireccioncalle;
        int valdireccionnro;
        int valdireccioncomuna;
        int valfonoparvulo;
        int valfonopadre;
        int valcelupadre;
        int valmailpadre;
        int valtrabajopadre;
        int valfonomadre;
        int valcelumadre;
        int valmailmadre;
        int valtrabajomadre;
        int valfonoapoderado;
        int valceluapoderado;
        int valmailapoderado;
        int valtrabajoapoderado;
        int valnombreemergencia;
        int valapellidopemergencia;
        int valapellidomemergencia;
        int valfonoemergencia;
        int valmailemergencia;

        int valnombreconviviente;
        int valapellidopconviviente;
        int valapellidomconviviente;
        int valparentescoconviviente;
        int valocupacionconviviente;

        int idconviviente;

        public EditarParvulos()
        {
            InitializeComponent();
        }

        public void LlenarParvulos()
        {
            dgv_Parvulos.Rows.Clear();
            try
            {
                Lista1 = BEDE.Parvulo.OrderBy(c => c.folio_ficha);
                foreach (Parvulo aux in Lista1)
                {
                    Nivel n = BEDE.Nivel.Single(d => d.cod_nivel == aux.cod_nivel);
                    dgv_Parvulos.Rows.Add(aux.folio_ficha.ToString(), aux.nombre.ToString(), n.nombre.ToString());
                }
                if (dgv_Parvulos.RowCount == 0) { btn_EditarFicha.Enabled = false; }
                else { btn_EditarFicha.Enabled = true;}
            }
            catch { btn_EditarFicha.Enabled = true;}
        }

        private void btn_Buscar_Click(object sender, EventArgs e)
        {
            if (rad_FiltroNivel.Checked == true)
            {
                if (cbx_NivelNiño.Text != "")
                {
                    dgv_Parvulos.Rows.Clear();
                    int aa = int.Parse(cbx_NivelNiño.SelectedValue.ToString());
                    Lista1 = BEDE.Parvulo.Where(c => c.cod_nivel == aa).OrderBy(c => c.rut_niño);
                    foreach (Parvulo aux in Lista1)
                    {
                        dgv_Parvulos.Rows.Add(aux.folio_ficha.ToString(), aux.nombre.ToString().Replace("·", " "), aux.Nivel.nombre.ToString());
                    }
                    if (dgv_Parvulos.RowCount == 0) { MessageBox.Show("El nivel seleccionado no tiene parvulos asociados aun.", "NO SE ENCONTRARON REGISTROS.", MessageBoxButtons.OK, MessageBoxIcon.Information); btn_EditarFicha.Enabled = false; }
                }
                else { MessageBox.Show("Ha olvidado seleccionar un nivel para filtrar información.", "ERROR DE FILTRO.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
            }
            if (rad_BuscarNiño.Checked == true)
            {
                if (tbx_DatoNiño.Text.Length >= 4)
                {
                    errorProvider1.SetError(rad_BuscarNiño, "");
                    g.BuscarEnGrid(tbx_DatoNiño.Text.ToString(), dgv_Parvulos);
                }
                else { errorProvider1.SetError(rad_BuscarNiño, "El dato ingresado debe de tener al menos 4 caracteres para poder iniciar una busqueda efectiva."); }
            }
        }

        private void rad_BuscarNiño_CheckedChanged(object sender, EventArgs e)
        {
            LlenarParvulos();
            cbx_NivelNiño.SelectedIndex = -1;
            cbx_NivelNiño.Enabled = false;
            tbx_DatoNiño.Enabled = true;
            tbx_DatoNiño.Clear();
            tbx_DatoNiño.Focus();
        }

        private void rad_FiltroNivel_CheckedChanged(object sender, EventArgs e)
        {
            LlenarParvulos();
            tbx_DatoNiño.Clear();
            tbx_DatoNiño.Enabled = false;
            cbx_NivelNiño.Enabled = true;
            cbx_NivelNiño.SelectedIndex = -1;
        }

        private void EditarParvulos_Load(object sender, EventArgs e)
        {
            LlenarParvulos();
            if (dgv_Parvulos.RowCount == 0) { this.Enabled = false; }
            else
            {
                this.Enabled = true;
                cbx_NivelNiño.Enabled = false;
                cbx_NivelNiño.DataSource = BEDE.Nivel.OrderBy(c => c.año);
                cbx_NivelNiño.DisplayMember = "nombre";
                cbx_NivelNiño.ValueMember = "cod_nivel";
                cbx_NivelNiño.SelectedIndex = -1;
                tab_Editor.Enabled = false;
                btn_GuardarCambios.Enabled = false;
                btn_TerminarEdicion.Enabled = false;
                btn_ActualizarConviviente.Visible = false;
                btn_DescCamConv.Visible = false;

            }
        }

        private void Limpiar()
        {
            label2.Text = "";
            label3.Text = "";
            label4.Text = "";
            label5.Text = "";
            label6.Text = "";
            tbx_DireccionCalle.Clear();
            tbx_DireccionNro.Clear();
            tbx_DireccionComuna.Clear();
            tbx_TelefonoNiño.Clear();
            dgv_Convivientes.Rows.Clear();
            tbx_FonoPadre.Clear();
            tbx_CeluPadre.Clear();
            tbx_MailPadre.Clear();
            tbx_TrabajoPadre.Clear();
            tbx_FonoMadre.Clear();
            tbx_CeluMadre.Clear();
            tbx_MailMadre.Clear();
            tbx_TrabajoMadre.Clear();
            tbx_FonoApoderado.Clear();
            tbx_CeluApoderado.Clear();
            tbx_MailApoderado.Clear();
            tbx_TrabajoApoderado.Clear();
            tbx_NombreEmergencia.Clear();
            tbx_ApellidoPEmergencia.Clear();
            tbx_ApellidoMEmergencia.Clear();
            tbx_FonoEmergencia.Clear();
            tbx_MailEmergencia.Clear();
            tbx_NombreConviviente.Clear();
            tbx_ApellidoMConviviente.Clear();
            tbx_ApellidoPConviviente.Clear();
            cbx_Parentesco.SelectedIndex = -1;
            nud_EdadConviviente.Value = 1;
            tbx_Actividad.Clear();
        }

        private int LlenarConvivientes()
        {
            dgv_Convivientes.Rows.Clear();
            if (cbx_Parentesco.Items.Contains("PADRE") == false) { cbx_Parentesco.Items.Insert(0, "PADRE"); }
            if (cbx_Parentesco.Items.Contains("MADRE") == false) { cbx_Parentesco.Items.Insert(1, "MADRE"); }
            if (cbx_Parentesco.Items.Contains("PADRASTRO") == false) { cbx_Parentesco.Items.Insert(6, "PADRASTRO"); }
            if (cbx_Parentesco.Items.Contains("MADRASTRA") == false) { cbx_Parentesco.Items.Insert(7, "MADRASTRA"); }
            int aaa = 0;
            foreach (Conviviente aux in ListaConvivientes)
            {
                dgv_Convivientes.Rows.Add(aux.cod_conviviente.ToString(), aux.nombre.ToString(), aux.parentesco.ToString(), aux.edad.ToString(), aux.actividad.ToString());
                aaa++;
                if (aux.parentesco == "PADRE") { cbx_Parentesco.Items.Remove("PADRE"); }
                else
                {
                    if (aux.parentesco == "MADRE") { cbx_Parentesco.Items.Remove("MADRE"); }
                    else
                    {
                        if (aux.parentesco == "PADRASTRO") { cbx_Parentesco.Items.Remove("PADRASTRO"); }
                        else
                        {
                            if (aux.parentesco == "MADRASTRA") { cbx_Parentesco.Items.Remove("MADRASTRA"); }
                        }
                    }
                }
            }
            if (aaa > 1) { btn_EliminarCOnviviente.Enabled = true; } else { btn_EliminarCOnviviente.Enabled = false; }
            return aaa;
        }

        private void btn_EditarFicha_Click(object sender, EventArgs e)
        {
            Limpiar();
            tab_Editor.Enabled = true;
            errorProvider1.Clear();
            a = int.Parse(dgv_Parvulos.CurrentRow.Cells[0].Value.ToString());
            Parvulo p = BEDE.Parvulo.Single(c => c.folio_ficha == a);
            label2.Text = "(" + p.nombre.ToString().Replace("·", " ") + ")";
            string[] direccion = p.domicilio.ToString().Split('#', ',');
            tbx_DireccionCalle.Text = direccion[0].ToString();
            tbx_DireccionNro.Text = direccion[1].ToString();
            tbx_DireccionComuna.Text = direccion[2].ToString();
            tbx_TelefonoNiño.Text = p.fono.ToString();
            ListaConvivientes = BEDE.Conviviente.Where(c => c.id_parvulo == a).OrderBy(c => c.cod_conviviente);
            dgv_Convivientes.Rows.Clear();
            int aaa = LlenarConvivientes();
            label3.Text = "(" + aaa.ToString() + " PERSONAS)";
            label4.Text = "(" + p.Padre.nombre.ToString().Replace("·", " ") + ")";
            if (p.Padre.fono.ToString() != "") { tbx_FonoPadre.Text = p.Padre.fono.ToString(); }
            tbx_CeluPadre.Text = p.Apoderado.celular.ToString();
            tbx_MailPadre.Text = p.Apoderado.email.ToString();
            tbx_TrabajoPadre.Text = p.Apoderado.lugar_trabajo.ToString();
            label5.Text = "(" + p.Madre.nombre.ToString().Replace("·", " ") + ")";
            if (p.Madre.fono.ToString() != "") { tbx_FonoMadre.Text = p.Madre.fono.ToString(); }
            tbx_CeluMadre.Text = p.Madre.celular.ToString();
            tbx_MailMadre.Text = p.Madre.email.ToString();
            tbx_TrabajoMadre.Text = p.Madre.lugar_trabajo.ToString();
            label6.Text = "(" + p.Apoderado.nombre.ToString().Replace("·", " ") + ")";
            if (p.Apoderado.fono.ToString() != "") { tbx_FonoApoderado.Text = p.Apoderado.fono.ToString(); }
            tbx_CeluApoderado.Text = p.Apoderado.celular.ToString();
            tbx_MailApoderado.Text = p.Apoderado.email.ToString();
            tbx_TrabajoApoderado.Text = p.Apoderado.lugar_trabajo.ToString();
            Emergencia E = BEDE.Emergencia.Single(c=>c.id_parvulo == a);
            string[] emergencia = E.nombre.ToString().Split(' ');
            tbx_NombreEmergencia.Text = emergencia[0].ToString().Replace("·", " ");
            tbx_ApellidoPEmergencia.Text = emergencia[1].ToString().Replace("·", " ");
            tbx_ApellidoMEmergencia.Text = emergencia[2].ToString().Replace("·", " ");
            tbx_FonoEmergencia.Text = E.celular.ToString();
            tbx_MailEmergencia.Text = E.email.ToString();
            btn_GuardarCambios.Enabled = true;
            btn_TerminarEdicion.Enabled = true;
            dgv_Parvulos.Enabled = false;
        }

        private void btn_Recargar_Click(object sender, EventArgs e)
        {
            if (dgv_Parvulos.Enabled == true)
            {
                LlenarParvulos();
            }
        }

        private void btn_DescartarCambios_Click(object sender, EventArgs e)
        {
            Limpiar();
            tab_Editor.SelectTab("DatosNiño");
            errorProvider1.Clear();
            tab_Editor.Enabled = false;
            btn_GuardarCambios.Enabled = false;
            btn_TerminarEdicion.Enabled = false;
            dgv_Parvulos.Enabled = true;
            btn_DescCamConv.Visible = false;
            btn_ActualizarConviviente.Visible = false;
            btn_AñadirConviviente.Visible = true;
        }

        private void btn_GuardarCambios_Click(object sender, EventArgs e)
        {
            tab_Editor.SelectTab("DatosNiño");
            tbx_DireccionCalle.Focus();
            tbx_DireccionNro.Focus();
            tbx_DireccionComuna.Focus();
            tbx_TelefonoNiño.Focus();
            tab_Editor.SelectTab("DatosFamilia");
            tbx_FonoPadre.Focus();
            tbx_CeluPadre.Focus();
            tbx_MailPadre.Focus();
            tbx_TrabajoPadre.Focus();
            tbx_FonoMadre.Focus();
            tbx_CeluMadre.Focus();
            tbx_MailMadre.Focus();
            tbx_TrabajoMadre.Focus();
            tbx_FonoApoderado.Focus();
            tbx_CeluApoderado.Focus();
            tbx_MailApoderado.Focus();
            tbx_TrabajoApoderado.Focus();
            tbx_NombreEmergencia.Focus();
            tbx_ApellidoPEmergencia.Focus();
            tbx_ApellidoMEmergencia.Focus();
            tbx_FonoEmergencia.Focus();
            tbx_MailEmergencia.Focus();
            btn_GuardarCambios.Focus();

            int continuar = valdireccioncalle * valdireccionnro * valdireccioncomuna * valfonoparvulo * valfonopadre * valcelupadre * valmailpadre * valtrabajopadre * valfonomadre * valcelumadre * valmailmadre * valtrabajomadre * valfonoapoderado * valceluapoderado * valmailapoderado * valtrabajoapoderado * valnombreemergencia * valapellidopemergencia * valapellidomemergencia * valfonoemergencia * valmailemergencia;
            if (continuar == 0) { MessageBox.Show("No se pueden realizar los cambios indicados, pues existen datos erroneos. Revise los campos indicados en el formulario, corríjalos y reintente guardar.", "ERROR DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            else
            {
                try
                {
                    Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == a);
                    aux.domicilio = tbx_DireccionCalle.Text.ToString() + " #" + tbx_DireccionNro.Text.ToString() + ", " + tbx_DireccionComuna.Text.ToString() ;
                    aux.fono = int.Parse(tbx_TelefonoNiño.Text);
                    if (tbx_FonoPadre.Text != "") { aux.Padre.fono = int.Parse(tbx_FonoPadre.Text); }
                    aux.Padre.celular = int.Parse(tbx_CeluPadre.Text);
                    aux.Padre.email = tbx_MailPadre.Text;
                    aux.Padre.lugar_trabajo = tbx_TrabajoPadre.Text;
                    if (tbx_FonoMadre.Text != "") { aux.Madre.fono = int.Parse(tbx_FonoMadre.Text); }
                    aux.Madre.celular = int.Parse(tbx_CeluMadre.Text);
                    aux.Madre.email = tbx_MailMadre.Text;
                    aux.Madre.lugar_trabajo = tbx_TrabajoMadre.Text;
                    if (tbx_FonoApoderado.Text != "") { aux.Apoderado.fono = int.Parse(tbx_FonoApoderado.Text); }
                    aux.Apoderado.celular = int.Parse(tbx_CeluApoderado.Text);
                    aux.Apoderado.email = tbx_MailApoderado.Text;
                    aux.Apoderado.lugar_trabajo = tbx_TrabajoApoderado.Text;
                    Emergencia aux2 = BEDE.Emergencia.Single(c => c.id_parvulo == a);
                    aux2.nombre = tbx_NombreEmergencia.Text.Replace(" ", "·") + " " + tbx_ApellidoPEmergencia.Text.Replace(" ", "·") + " " + tbx_ApellidoMEmergencia.Text.Replace(" ", "·");
                    aux2.celular = int.Parse(tbx_FonoEmergencia.Text);
                    aux2.email = tbx_MailEmergencia.Text;
                    BEDE.SaveChanges();
                    Limpiar();
                    dgv_Parvulos.Enabled = true;
                    tab_Editor.Enabled = false;
                    MessageBox.Show("Los cambios en los datos indicados se realizaron exitosamente. La información ya se encuentra actualizada en la base de datos.", "MODIFICACIONES REALIZADAS.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch { MessageBox.Show("Ocurrió un error mientras se intentaban actualizar los registros. Compruebe su conexión a internet, y reintente aplicar los cambios.", "ERROR EN EL PROCESO.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            }
        }

        private void tbx_DireccionCalle_Leave(object sender, EventArgs e)
        {
            tbx_DireccionCalle.Text = tbx_DireccionCalle.Text.Trim();
            valdireccioncalle = v.ValidarTextos(tbx_DireccionCalle.Text);
            if (valdireccioncalle == 0) { errorProvider1.SetError(lbl_DireccionCalle, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_DireccionCalle, ""); }
        }

        private void tbx_DireccionNro_Leave(object sender, EventArgs e)
        {
            tbx_DireccionNro.Text = tbx_DireccionNro.Text.Trim();
            valdireccionnro = v.ValidarNumeros(tbx_DireccionNro.Text);
            if (valdireccionnro == 0) { errorProvider1.SetError(lbl_Numero, "Este campo solo puede contener valores numericos enteros.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_Numero, ""); }
        }

        private void tbx_DireccionComuna_Leave(object sender, EventArgs e)
        {
            tbx_DireccionComuna.Text = tbx_DireccionComuna.Text.Trim();
            valdireccioncomuna = v.ValidarTextos(tbx_DireccionComuna.Text);
            if (valdireccioncomuna == 0) { errorProvider1.SetError(lbl_Comuna, "Este campo solo puede contener valores numericos enteros.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_Comuna, ""); }
        }

        private void tbx_TelefonoNiño_Leave(object sender, EventArgs e)
        {
            tbx_TelefonoNiño.Text = tbx_TelefonoNiño.Text.Trim();
            valfonoparvulo = v.ValidarFono(tbx_TelefonoNiño.Text);
            if (valfonoparvulo == 0) { errorProvider1.SetError(lbl_FonoNiño, "El número de telefono ingresado no tiene el formato correcto.\n(un nro. de teléfono se compone de un prefijo 02, y 7 digutos enteros)."); }
            else { errorProvider1.SetError(lbl_FonoNiño, ""); }
        }

        private void tbx_FonoPadre_Leave(object sender, EventArgs e)
        {
            if (tbx_FonoPadre.Text != "")
            {
                tbx_FonoPadre.Text = tbx_FonoPadre.Text.Trim();
                valfonopadre = v.ValidarFono(tbx_FonoPadre.Text);
                if (valfonopadre == 0) { errorProvider1.SetError(lbl_FonoPadre, "El número de telefono ingresado no tiene el formato correcto.\n(un nro. de teléfono se compone de un prefijo 02, y 7 digutos enteros)."); }
                else { errorProvider1.SetError(lbl_FonoPadre, ""); }
            }
            else { valfonopadre = 1; errorProvider1.SetError(lbl_FonoPadre, ""); }
        }

        private void tbx_CeluPadre_Leave(object sender, EventArgs e)
        {
            tbx_CeluPadre.Text = tbx_CeluPadre.Text.Trim();
            valcelupadre = v.ValidarFono(tbx_CeluPadre.Text);
            if (valcelupadre == 0) { errorProvider1.SetError(lbl_CeluPadre, "El número de celular ingresado no tiene el formato correcto.\n(un nro. de celular se compone de un prefijo 06, 07, 08 o 09, y 7 digutos enteros)."); }
            else { errorProvider1.SetError(lbl_CeluPadre, ""); }
        }

        private void tbx_MailPadre_Leave(object sender, EventArgs e)
        {
            tbx_MailPadre.Text = tbx_MailPadre.Text.Trim();
            valmailpadre = v.ValidarMail(tbx_MailPadre.Text);
            if (valmailpadre == 0) { errorProvider1.SetError(lbl_MailPadre, "El correo electrónico ingresado es incorrecto.\n(no tiene la estructura estándar de un correo electrónico).\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_MailPadre, ""); }
        }

        private void tbx_TrabajoPadre_Leave(object sender, EventArgs e)
        {
            tbx_TrabajoPadre.Text = tbx_TrabajoPadre.Text.Trim();
            valtrabajopadre = v.ValidarDescripciones(tbx_TrabajoPadre.Text);
            if (valtrabajopadre == 0) { errorProvider1.SetError(lbl_TrabajoPadre, "Este campo solo puede contener LETRAS, ESPACIOS, COMAS (,) Y PUNTOS (.).\nPuede que el campo esté mal escrito :\n * El Campo no puede iniciar con una coma ni con un punto.\n * La descripción no puede tener mas comas que espacios en blanco."); }
            else { errorProvider1.SetError(lbl_TrabajoPadre, ""); }
        }

        private void tbx_FonoMadre_Leave(object sender, EventArgs e)
        {
            if (tbx_FonoMadre.Text != "")
            {
                tbx_FonoMadre.Text = tbx_FonoMadre.Text.Trim();
                valfonomadre = v.ValidarFono(tbx_FonoMadre.Text);
                if (valfonomadre == 0) { errorProvider1.SetError(lbl_FonoMadre, "El número de telefono ingresado no tiene el formato correcto.\n(un nro. de teléfono se compone de un prefijo 02, y 7 digutos enteros)."); }
                else { errorProvider1.SetError(lbl_FonoMadre, ""); }
            }
            else { valfonomadre = 1; errorProvider1.SetError(lbl_FonoMadre, ""); }
        }

        private void tbx_CeluMadre_Leave(object sender, EventArgs e)
        {
            tbx_CeluMadre.Text = tbx_CeluMadre.Text.Trim();
            valcelumadre = v.ValidarFono(tbx_CeluMadre.Text);
            if (valcelumadre == 0) { errorProvider1.SetError(lbl_CeluMadre, "El número de celular ingresado no tiene el formato correcto.\n(un nro. de celular se compone de un prefijo 06, 07, 08 o 09, y 7 digutos enteros)."); }
            else { errorProvider1.SetError(lbl_CeluMadre, ""); }
        }

        private void tbx_MailMadre_Leave(object sender, EventArgs e)
        {
            tbx_MailMadre.Text = tbx_MailMadre.Text.Trim();
            valmailmadre = v.ValidarMail(tbx_MailMadre.Text);
            if (valmailmadre == 0) { errorProvider1.SetError(lbl_MailMadre, "El correo electrónico ingresado es incorrecto.\n(no tiene la estructura estándar de un correo electrónico).\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_MailMadre, ""); }
        }

        private void tbx_TrabajoMadre_Leave(object sender, EventArgs e)
        {
            tbx_TrabajoMadre.Text = tbx_TrabajoMadre.Text.Trim();
            valtrabajomadre = v.ValidarDescripciones(tbx_TrabajoMadre.Text);
            if (valtrabajomadre == 0) { errorProvider1.SetError(lbl_TrabajoMadre, "Este campo solo puede contener LETRAS, ESPACIOS, COMAS (,) Y PUNTOS (.).\nPuede que el campo esté mal escrito :\n * El Campo no puede iniciar con una coma ni con un punto.\n * La descripción no puede tener mas comas que espacios en blanco."); }
            else { errorProvider1.SetError(lbl_TrabajoMadre, ""); }
        }

        private void tbx_FonoApoderado_Leave(object sender, EventArgs e)
        {
            if (tbx_FonoApoderado.Text != "")
            {
                tbx_FonoApoderado.Text = tbx_FonoApoderado.Text.Trim();
                valfonoapoderado = v.ValidarFono(tbx_FonoApoderado.Text);
                if (valfonoapoderado == 0) { errorProvider1.SetError(lbl_FonoApoderado, "El número de telefono ingresado no tiene el formato correcto.\n(un nro. de teléfono se compone de un prefijo 02, y 7 digutos enteros)."); }
                else { errorProvider1.SetError(lbl_FonoApoderado, ""); }
            }
            else { valfonoapoderado = 1; errorProvider1.SetError(lbl_FonoApoderado, ""); }
        }

        private void tbx_CeluApoderado_Leave(object sender, EventArgs e)
        {
            tbx_CeluApoderado.Text = tbx_CeluApoderado.Text.Trim();
            valceluapoderado = v.ValidarFono(tbx_CeluApoderado.Text);
            if (valceluapoderado == 0) { errorProvider1.SetError(lbl_CeluApoderado, "El número de celular ingresado no tiene el formato correcto.\n(un nro. de celular se compone de un prefijo 06, 07, 08 o 09, y 7 digutos enteros)."); }
            else { errorProvider1.SetError(lbl_CeluApoderado, ""); }
        }

        private void tbx_MailApoderado_Leave(object sender, EventArgs e)
        {
            tbx_MailApoderado.Text = tbx_MailApoderado.Text.Trim();
            valmailapoderado = v.ValidarMail(tbx_MailApoderado.Text);
            if (valmailapoderado == 0) { errorProvider1.SetError(lbl_MailApoderado, "El correo electrónico ingresado es incorrecto.\n(no tiene la estructura estándar de un correo electrónico).\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_MailApoderado, ""); }
        }

        private void tbx_TrabajoApoderado_Leave(object sender, EventArgs e)
        {
            tbx_TrabajoApoderado.Text = tbx_TrabajoApoderado.Text.Trim();
            valtrabajoapoderado = v.ValidarDescripciones(tbx_TrabajoApoderado.Text);
            if (valtrabajoapoderado == 0) { errorProvider1.SetError(lbl_TrabajoApoderado, "Este campo solo puede contener LETRAS, ESPACIOS, COMAS (,) Y PUNTOS (.).\nPuede que el campo esté mal escrito :\n * El Campo no puede iniciar con una coma ni con un punto.\n * La descripción no puede tener mas comas que espacios en blanco."); }
            else { errorProvider1.SetError(lbl_TrabajoApoderado, ""); }
        }

        private void tbx_NombreEmergencia_Leave(object sender, EventArgs e)
        {
            tbx_NombreEmergencia.Text = tbx_NombreEmergencia.Text.Trim();
            valnombreemergencia = v.ValidarTextos(tbx_NombreEmergencia.Text);
            if (valnombreemergencia == 0) { errorProvider1.SetError(lbl_NombreEmergencia, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NombreEmergencia, ""); }
        }

        private void tbx_ApellidoPEmergencia_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoPEmergencia.Text = tbx_ApellidoPEmergencia.Text.Trim();
            valapellidopemergencia = v.ValidarTextos(tbx_ApellidoPEmergencia.Text);
            if (valapellidopemergencia == 0) { errorProvider1.SetError(lbl_ApellidoPEmergencia, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoPEmergencia, ""); }
        }

        private void tbx_ApellidoMEmergencia_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoMEmergencia.Text = tbx_ApellidoMEmergencia.Text.Trim();
            valapellidomemergencia = v.ValidarTextos(tbx_ApellidoMEmergencia.Text);
            if (valapellidomemergencia == 0) { errorProvider1.SetError(lbl_ApellidoMEmergencia, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoMEmergencia, ""); }
        }

        private void tbx_CelularEmergencia_Leave(object sender, EventArgs e)
        {
            if (tbx_FonoEmergencia.Text != "")
            {
                tbx_FonoEmergencia.Text = tbx_FonoEmergencia.Text.Trim();
                valfonoemergencia = v.ValidarFono(tbx_FonoEmergencia.Text);
                if (valfonoemergencia == 0) { errorProvider1.SetError(lbl_FonoEmergencia, "El número de telefono ingresado no tiene el formato correcto.\n(un nro. de teléfono se compone de un prefijo 02, y 7 digutos enteros)."); }
                else { errorProvider1.SetError(lbl_FonoEmergencia, ""); }
            }
            else { valfonoemergencia = 1; errorProvider1.SetError(lbl_FonoEmergencia, ""); }
        }

        private void tbx_MailEmergencia_Leave(object sender, EventArgs e)
        {
            tbx_MailEmergencia.Text = tbx_MailEmergencia.Text.Trim();
            valmailemergencia = v.ValidarMail(tbx_MailEmergencia.Text);
            if (valmailemergencia == 0) { errorProvider1.SetError(lbl_MailEmergencia, "El correo electrónico ingresado es incorrecto.\n(no tiene la estructura estándar de un correo electrónico).\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_MailEmergencia, ""); }
        }

        private void tbx_NombreConviviente_Leave(object sender, EventArgs e)
        {
            tbx_NombreConviviente.Text = tbx_NombreConviviente.Text.Trim();
            valnombreconviviente = v.ValidarTextos(tbx_NombreConviviente.Text);
            if (valnombreconviviente == 0) { errorProvider1.SetError(lbl_NombreConviviente, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NombreConviviente, ""); }
        }

        private void tbx_ApellidoPConviviente_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoPConviviente.Text = tbx_ApellidoPConviviente.Text.Trim();
            valapellidopconviviente = v.ValidarTextos(tbx_ApellidoPConviviente.Text);
            if (valapellidopconviviente == 0) { errorProvider1.SetError(lbl_ApellidoPConviviente, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoPConviviente, ""); }
        }

        private void tbx_ApellidoMConviviente_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoMConviviente.Text = tbx_ApellidoMConviviente.Text.Trim();
            valapellidomconviviente = v.ValidarTextos(tbx_ApellidoMConviviente.Text);
            if (valapellidomconviviente == 0) { errorProvider1.SetError(lbl_ApellidoMConviviente, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoMConviviente, ""); }
        }

        private void cbx_Parentesco_Leave(object sender, EventArgs e)
        {
            valparentescoconviviente = v.ValidarCombobox(cbx_Parentesco.Text);
            if (valparentescoconviviente == 0) { errorProvider1.SetError(lbl_Parentesco, "Debe seleccionar un parentesco entre el conviviente y el párvulo."); }
            else { errorProvider1.SetError(lbl_Parentesco, ""); }
        }

        private void tbx_Actividad_Leave(object sender, EventArgs e)
        {
            tbx_Actividad.Text = tbx_Actividad.Text.Trim();
            valocupacionconviviente = v.ValidarDescripciones(tbx_Actividad.Text);
            if (valocupacionconviviente == 0) { errorProvider1.SetError(lbl_Actividad, "Este campo solo puede contener LETRAS, ESPACIOS, COMAS (,) Y PUNTOS (.).\nPuede que el campo esté mal escrito :\n * El Campo no puede iniciar con una coma ni con un punto.\n * La descripción no puede tener mas comas que espacios en blanco.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_Actividad, ""); }
        }

        private void btn_EditarTrabajador_Click(object sender, EventArgs e)
        {
            idconviviente = int.Parse(dgv_Convivientes.CurrentRow.Cells[0].Value.ToString());
            Conviviente aux = BEDE.Conviviente.Single(c => c.cod_conviviente == idconviviente);
            string[] nombre = aux.nombre.Split(' ');
            tbx_NombreConviviente.Text = nombre[0].ToString().Replace("·", " ");
            tbx_ApellidoPConviviente.Text = nombre[1].ToString().Replace("·", " ");
            tbx_ApellidoMConviviente.Text = nombre[2].ToString().Replace("·", " ");
            if (cbx_Parentesco.Items.Contains(aux.parentesco.ToString()) == false) { cbx_Parentesco.Items.Insert(5, aux.parentesco.ToString()); }
            cbx_Parentesco.Text = aux.parentesco.ToString();
            nud_EdadConviviente.Value = aux.edad;
            tbx_Actividad.Text = aux.actividad.ToString();
            btn_ActualizarConviviente.Visible = true;
            btn_DescCamConv.Visible = true;
            btn_AñadirConviviente.Visible = false;
        }

        private void btn_DescCamConv_Click(object sender, EventArgs e)
        {
            tbx_NombreConviviente.Clear(); ;
            tbx_ApellidoPConviviente.Clear();
            tbx_ApellidoMConviviente.Clear();
            cbx_Parentesco.SelectedIndex = -1;
            nud_EdadConviviente.Value = 1;
            tbx_Actividad.Clear();
            btn_ActualizarConviviente.Visible = false;
            btn_DescCamConv.Visible = false;
            btn_AñadirConviviente.Visible = true;
        }

        private void EditarParvulos_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Dispose();
        }

        private void btn_ActualizarConviviente_Click(object sender, EventArgs e)
        {
            tbx_NombreConviviente.Focus();
            tbx_ApellidoPConviviente.Focus();
            tbx_ApellidoMConviviente.Focus();
            cbx_Parentesco.Focus();
            nud_EdadConviviente.Focus();
            tbx_Actividad.Focus();
            btn_ActualizarConviviente.Focus();

            int seguir = valnombreconviviente * valapellidopconviviente * valapellidomconviviente * valparentescoconviviente * valocupacionconviviente;
            if (seguir == 0) { MessageBox.Show("No se puede actualizar el registro, pues los datos ingresados son erroneos. Revise los campos señalados, corrijalos y reintente la operación.", "ERROR DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            else
            {
                Conviviente aux = BEDE.Conviviente.Single(c => c.cod_conviviente == idconviviente);
                aux.nombre = tbx_NombreConviviente.Text.Replace(" ", "·") + " " + tbx_ApellidoPConviviente.Text.Replace(" ", "·") + " " + tbx_ApellidoMConviviente.Text.Replace(" ", "·");
                aux.parentesco = cbx_Parentesco.Text.ToString();
                aux.edad = int.Parse(nud_EdadConviviente.Value.ToString());
                aux.actividad = tbx_Actividad.Text;
                BEDE.SaveChanges();
                tbx_NombreConviviente.Enabled = true; tbx_NombreConviviente.Clear();
                tbx_ApellidoPConviviente.Enabled = true; tbx_ApellidoPConviviente.Clear();
                tbx_ApellidoMConviviente.Enabled = true; tbx_ApellidoMConviviente.Clear();
                cbx_Parentesco.SelectedIndex = -1;
                nud_EdadConviviente.Value = 1;
                tbx_Actividad.Clear();
                LlenarConvivientes();
                btn_ActualizarConviviente.Visible = false;
                btn_DescCamConv.Visible = false;
                btn_AñadirConviviente.Visible = true;
            }
        }

        private void cbx_Parentesco_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbx_Parentesco.Text == "PADRE")
            {
                int a = int.Parse(dgv_Parvulos.CurrentRow.Cells[0].Value.ToString());
                Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == a);
                string[] nombrepadre = aux.Padre.nombre.Split(' ');
                tbx_NombreConviviente.Text = nombrepadre[0].ToString();
                tbx_NombreConviviente.Enabled = false;
                valnombreconviviente = 1;
                tbx_ApellidoPConviviente.Text = nombrepadre[1].ToString();
                tbx_ApellidoPConviviente.Enabled = false;
                valapellidopconviviente = 1;
                tbx_ApellidoMConviviente.Text = nombrepadre[2].ToString();
                tbx_ApellidoMConviviente.Enabled = false;
                valapellidomconviviente = 1;
            }
            else
            {
                if (cbx_Parentesco.Text == "MADRE")
                {
                    int a = int.Parse(dgv_Parvulos.CurrentRow.Cells[0].Value.ToString());
                    Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == a);
                    string[] nombremadre = aux.Madre.nombre.Split(' ');
                    tbx_NombreConviviente.Text = nombremadre[0].ToString();
                    tbx_NombreConviviente.Enabled = false;
                    valnombreconviviente = 1;
                    tbx_ApellidoPConviviente.Text = nombremadre[1].ToString();
                    tbx_ApellidoPConviviente.Enabled = false;
                    valapellidopconviviente = 1;
                    tbx_ApellidoMConviviente.Text = nombremadre[2].ToString();
                    tbx_ApellidoMConviviente.Enabled = false;
                    valapellidomconviviente = 1;
                }
                else
                {
                    tbx_NombreConviviente.Enabled = true;
                    tbx_ApellidoPConviviente.Enabled = true;
                    tbx_ApellidoMConviviente.Enabled = true;
                }
            }
        }

        private void btn_EliminarCOnviviente_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro de querer eliminar el conviviente seleccionado?", "ELIMINAR REGISTRO.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                int aa = int.Parse(dgv_Convivientes.CurrentRow.Cells[0].Value.ToString());
                Conviviente aux = BEDE.Conviviente.Single(c => c.cod_conviviente == aa);
                BEDE.Conviviente.DeleteObject(aux);
                BEDE.SaveChanges();
                errorProvider1.Clear();
                LlenarConvivientes();
            }
        }

        private void btn_AñadirConviviente_Click(object sender, EventArgs e)
        {
            
            tbx_NombreConviviente.Focus();
            tbx_ApellidoPConviviente.Focus();
            tbx_ApellidoMConviviente.Focus();
            cbx_Parentesco.Focus();
            nud_EdadConviviente.Focus();
            tbx_Actividad.Focus();
            btn_AñadirConviviente.Focus();

            int seguir = valnombreconviviente * valapellidopconviviente * valapellidomconviviente * valparentescoconviviente * valocupacionconviviente;
            if (seguir == 0) { MessageBox.Show("No se puede agregar el nuevo conviviente, pues los datos ingresados son erroneos. Revise los campos señalados, corrijalos y reintente la operación.", "ERROR DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            else
            {
                Conviviente aux = new Conviviente();
                aux.cod_conviviente = g.GenCodConviviente();
                aux.nombre = tbx_NombreConviviente.Text.Replace(" ", "·") + " " + tbx_ApellidoPConviviente.Text.Replace(" ", "·") + " " + tbx_ApellidoMConviviente.Text.Replace(" ", "·");
                aux.parentesco = cbx_Parentesco.Text.ToString();
                aux.edad = int.Parse(nud_EdadConviviente.Value.ToString());
                aux.actividad = tbx_Actividad.Text;
                aux.id_parvulo = a;
                BEDE.Conviviente.AddObject(aux);
                BEDE.SaveChanges();
                tbx_NombreConviviente.Enabled = true; tbx_NombreConviviente.Clear();
                tbx_ApellidoPConviviente.Enabled = true; tbx_ApellidoPConviviente.Clear();
                tbx_ApellidoMConviviente.Enabled = true; tbx_ApellidoMConviviente.Clear();
                cbx_Parentesco.SelectedIndex = -1;
                nud_EdadConviviente.Value = 1;
                tbx_Actividad.Clear();
                LlenarConvivientes();
            }
        }

    }
}
